﻿using Agenda.Model.Entities;
using DDotNet.DataFactory;
using DDotNet.DataFactory.DirectAccess;
using DDotNet.DataFactory.DirectAccess.Enum;
using DDotNet.DataFactory.DirectAccess.SortParameter;
using DDotNet.DataFactory.Interface;

namespace Agenda.Business
{
    /// <summary>
    /// Entidade de Regra de Negócios para a Agenda
    /// </summary>
    public sealed class RegistroAgendaBusiness
    {
        /// <summary>
        /// Retorna Todos os Registros da Agenda
        /// </summary>
        /// <returns>Todos os Registro de Agenda Ordenados pelo Nome do Contato</returns>
        public RegistroAgendaCollection GetAll()
        {
            // Cria Objetos
            RegistroAgendaCollection agendaCollection = new RegistroAgendaCollection();
            ICrudFactory crudFactory = new CRUDFactory();
            DirectAccessQueryFactory directAccessQueryFactory;

            using (crudFactory)
            {
                // Inicializa o Engine de Query
                directAccessQueryFactory = new DirectAccessQueryFactory(crudFactory);
                
                // Realiza o Select
                agendaCollection.Fill(
                    directAccessQueryFactory.SelectAll(typeof(RegistroAgenda), new GenericSortParameter("Nome", GenericSortMode.Asc)));
            }
            
            // Retorna
            return agendaCollection;
        }
        
        /// <summary>
        /// Atualiza um Registro de Agenda no Banco de Dados
        /// </summary>
        /// <param name="registroAgenda">Registro de Agenda para Atualizar no Banco de Dados</param>
        public void UpdateDB(RegistroAgenda registroAgenda)
        {
            // Cria Objetos
            ICrudFactory crudFactory = new CRUDFactory();

            using (crudFactory)
            {
                // Realiza o Update
                crudFactory.Update(registroAgenda);
            }
        }
    }
}